import { padStart } from 'lodash-es';
// 获取 当前 日期并格式化为 YYYY-MM-DD
import moment from "moment"
// 获取当前日期并格式化为 YYYY-MM-DD
export const getCurrentDate = () => {
  const now = new Date();
  const year = now.getFullYear();
  const month = padStart((now.getMonth() + 1).toString(), 2, '0'); // 月份从0开始，所以加1
  const day = padStart(now.getDate().toString(), 2, '0');
  return `${year}-${month}-${day}`;
};
// 获取 昨天 日期并格式化为 YYYY-MM-DD
export const getYesterdayDateFormatted = () => {
  const yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1); // 获取昨天的日期
  const year = yesterday.getFullYear();
  const month = String(yesterday.getMonth() + 1).padStart(2, '0'); // 月份从0开始
  const day = String(yesterday.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};
// 获取传入日期的昨天
export const getYesterdayFromDate = (dateStr) => {
  // 创建一个新的 Date 对象
  const date = new Date(dateStr);
  // 检查日期是否有效
  if (isNaN(date.getTime())) {
    throw new Error("请传入 YYYY-MM-DD 格式的日期");
  }
  // 设置日期为昨天
  date.setDate(date.getDate() - 1);
  // 获取 YYYY-MM-DD 格式的日期
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

// 将一天分成 24 小时，每小时分成 60 分，每 5 分钟为一个时间点
export const generateTimeArray = () => {
  const times = [];
  const totalMinutes = 24 * 60; // 一天的总分钟数
  for (let i = 0; i < totalMinutes; i += 5) {
    const hours = String(Math.floor(i / 60)).padStart(2, '0');
    const minutes = String(i % 60).padStart(2, '0');
    const timeString = `${hours}:${minutes}:00`;
    times.push(timeString);
  }
  return times;
};

//选中日期范围展开所有日期
export const format = (time) => {
  let ymd = "";
  let mouth =
    time.getMonth() + 1 >= 10
      ? time.getMonth() + 1
      : "0" + (time.getMonth() + 1);
  let day = time.getDate() >= 10 ? time.getDate() : "0" + time.getDate();
  ymd += time.getFullYear() + "-"; // 获取年份。
  ymd += mouth + "-"; // 获取月份。
  ymd += day; // 获取日。
  return ymd; // 返回日期。
}

// 获取两个日期之间的所有日期
export const getAllDate = (start, end) => {
  let dateArr = [];
  let startArr = start.split("-");
  let endArr = end.split("-");
  let db = new Date();
  db.setUTCFullYear(startArr[0], startArr[1] - 1, startArr[2]);
  let de = new Date();
  de.setUTCFullYear(endArr[0], endArr[1] - 1, endArr[2]);
  let unixDb = db.getTime();
  let unixDe = de.getTime();
  let stamp;
  const oneDay = 24 * 60 * 60 * 1000;
  for (stamp = unixDb; stamp <= unixDe;) {
    dateArr.push(format(new Date(parseInt(stamp))));
    stamp = stamp + oneDay;
  }
  return dateArr;
}
export const create = (dataList, minute) => {
  let arr = [];
  for (let j = 0; j < dataList.length; j++) {
    var seconds = minute * 60;

    let len = (60 * 24 * 60) / seconds; //数组长度
    for (var i = 0, total = 0; i < len; i++) {
      var h = parseInt(total / 3600),
        min = parseInt((total % 3600) / 60);
      arr.push(dataList[j] + " " + s(h) + ":" + s(min) + ":" + "00");
      total += seconds;
    }
  }
  return arr;
}
export const s = (n) => {
  return n < 10 ? "0" + n : n;
}
// 构造导出后端所需数据格式，函数接收data和字段顺序作为参数
export const transformExportData = (data, order) => {
  // 创建结果数组
  return data.map((item) => {
    // 为每个字段顺序映射相应的值
    return order.map((key) => item[key]);
  });
}

//将毫秒转为天，时，分
export const formatMillisecondsToDHM = (ms) => {
  // 处理毫秒数
  const duration = moment.duration(ms);

  // 格式化输出
  return `${duration.days()}天${duration.hours()}小时${duration.minutes()}分钟`;
};